public class TestDemo4 {
    public static int marProfit(int [] prices){
        if(prices==null||prices.length<2){
            return 0;
        }int index=0;
        int tem=prices.length;
        int total=0;
        while(index<tem){
            //如果股票下跌就一直找，直到找到股票开始上涨为之。
            while(index<tem-1&&prices[index]>=prices[index+1]){
                index++;
            }int min=prices[index];//股票开始上涨的值
            //一直找到股票上涨最大值为止
            while(index<tem-1&&prices[index]<=prices[index+1]){
                index++;
            } total+=prices[index++]-min;//这里要后置++的目的是为了截止数组做准备
        }return total;               //不加后面++会死循环，因为到了最后一个下标时不能再加
    }
    public static void main5(String[] args) {
        int []nums={7,1,5,3,6,4};
        System.out.println(marProfit(nums));
    }


    //删除排序数组中的重复项
    public static int removeDuplicates(int[] nums) {
        int left = 0;
        int right = 1;
        for (right = 1; right < nums.length; right++) {
            if (nums[right] != nums[left]) {
                nums[++left] = nums[right];//left先后移然后再把right下标的值赋给left。
            }
        }
        return ++left;//计算数组长度要+1;
    }

    public static void main4(String[] args) {
        int []nums={0,1,1,2,2,2,3};
        System.out.println(removeDuplicates(nums));
    }
    //给定一个已按照 非递减顺序排列  的整数数组 numbers ，请你从数组中找出两个数满足相加之和等于目标数 target
    public int[] twoSum(int[] numbers, int target) {
        int i=0;
        int j=numbers.length-1;
        while(i<j){
            int sum=numbers[i]+numbers[j];
            if(sum>target){
                j--;
            }else if(sum<target){
                i++;
            }else{
                return new int []{i+1,j+1};//注意这里需要new一个新的对象
            }
        }
        return null;
    }
    //给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    public static void moveZeroes(int[] nums) {
        int index = 0;
        int j=0;
        for (int num : nums) {
            if (num != 0) {
                nums[index++] = num;//后置++，先赋值再++
            }
        }
        for (int i = index; i < nums.length; i++) {
            nums[i] = 0;
        }
        for( j=0;j<nums.length;j++){
            System.out.print(nums[j]+" ");
        }
    }

    public static void main3(String[] args) {
        int []nums={1,0,2,3,4,0,5};
        moveZeroes(nums);
    }
    public static void rotate(int[] nums, int k) {     //注：k取模大于自己的数得到的是本身自己
        k%=nums.length;//这个轮转是循环的，当k>nums的长度时，就需要取余，来实际求出在数组移动的次数。
        reverse(nums, 0, nums.length - 1);//整个数组反转
        reverse(nums, 0, k - 1);//把要右转轮的数字返原序列
        reverse(nums, k, nums.length - 1);//把右转伦后面的数组返原序列
     int i=0;
     for(i=0;i<nums.length;i++){
         System.out.print(nums[i]+" ");
     }
    }

    public static void reverse(int[] nums, int start, int end) {//实现交换函数
        while (start < end) {
            int tem = nums[start];
            nums[start] = nums[end];
            nums[end] = tem;
            start++;
            end--;
        }
    }

    public static void main1(String[] args) {
        int[] nums={1,2,3,4,5,6,7};
        rotate(nums,3);
    }
}


